#include <algorithm>
#include <cassert>
#include <iostream>
#include <unordered_set>
#include <vector>

using namespace std;

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        // 使用 unordered_set 存储 nums 中的唯一元素
        unordered_set<int> numSet(nums.begin(), nums.end());

        int res = 0;
        for (int num : numSet) {
            // 如果 num-1不存在于 unordered_set 中，表示 num
            // 可能是一个序列的起点
            if (numSet.find(num - 1) == numSet.end()) {
                // 初始化当前数字为 num，初始化当前序列长度为 1
                int currentNum = num;
                int currentStreak = 1;

                // 循环查找连续的下一个数字，并增加序列长度
                while (numSet.find(currentNum + 1) != numSet.end()) {
                    ++currentNum;
                    ++currentStreak;
                }

                // 更新最长序列长度
                res = max(res, currentStreak);
            }
        }

        return res;
    }
};

int main() {
    Solution s;

    vector<int> input1{100, 4, 200, 1, 3, 2};
    vector<int> input2{0, 3, 7, 2, 5, 8, 4, 6, 0, 1};

    assert(s.longestConsecutive(input1) == 4);
    assert(s.longestConsecutive(input2) == 9);

    return 0;
}